package com.leyou.item.service;

import com.leyou.item.mapper.BrandMapper;
import com.leyou.item.mapper.CategoryMapper;
import com.leyou.item.pojo.Category;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@Transactional
public class CategoryService {

    // 使用通用mapper查询
    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private BrandMapper brandMapper;

    /**
     * 根据父类目id,parentid查询数据
     *
     * @param pid
     * @return
     */
    public List<Category> queryCategoriesByPid(Long pid) {
        Category category = new Category();
        category.setParentId(pid);
        // 通用mapper方法select ,根据实体中的属性值进行查询，查询条件使用等号
        return this.categoryMapper.select(category);
    }

    /**
     * 通过品牌id查询商品大类
     *
     * @param bid
     * @return
     */
    public List<Category> queryByBrandId(Long bid) {
        return this.categoryMapper.queryByBrandId(bid);
    }


    /**
     * 根据cid 查询类目，提供给商品查询的类目展示 xx/xx/xx
     *
     * @return：返回的结果是所属类目的名称 对应tb_spu表里  3个cid1 ,cid2,cid3 [手机,手机通讯,手机]
     * @param：传过来的参数是3个cid
     */
    public List<String> queryNameByIds(List<Long> cids) {
        // 通过列表，查询并返回实体类，自动遍历列表中的数据
        // 这个方法selectByIdList使用的是通用mapper继承的SelectByIdListMapper
        // 当你这个参数是个list集合,这个list集里面又存储了任意个id, 这个方法会自动的遍历集合 ,根据每个id进行查询封装,返回一个list
        List<Category> list = this.categoryMapper.selectByIdList(cids);
        // 创建个新数组接收
        //ArrayList<String> names = new ArrayList<>();
        //for (Category category : list) {
        //    names.add(category.getName());
        //}
        //
        //return names;

        // 使用stream替换上面的数据处理
        return list.stream().map(Category::getName).collect(Collectors.toList());

    }

    /**
     * 根据cid3来获取父类cid2和cid1的方法（用于前端面包屑展示）
     *
     * @param id
     * @return
     */
    public List<Category> queryAllByCid3(Long id) {
        Category cid3 = this.categoryMapper.selectByPrimaryKey(id);
        // 根据cid3获取cid2，对面里有parentId
        Category cid2 = this.categoryMapper.selectByPrimaryKey(cid3.getParentId());
        Category cid1 = this.categoryMapper.selectByPrimaryKey(cid2.getParentId());
        return Arrays.asList(cid1, cid2, cid3);
    }
}
